package define

type Identified interface {
	Id() string
}

type FilterDefine struct {
	id      string
	setting map[string]interface{}
}

type RouteDefine struct {
	id       string   // 路由标识
	uri      string   // 路由匹配uri条件
	method   string   // 路由匹配method条件
	host     string   // 路由匹配host条件
	header   string   // 路由匹配header条件
	filters  []string // 路由使用插件列表
	targetId string   // 路由的目标ID
}

type TargetDefine struct {
	id   string
	cate string // s-static, d-dynamic

	// 静态模式 {{
	nodes []string
	// }}

	// 动态模式 {{
	providerId string // 提供者ID
	service    string // 服务名称
	// }}

	// 配置 {{
	balance map[string]string // 负载均衡配置
	retries map[string]string // 重试配置
	checker map[string]string // 探活配置
	breaker map[string]string // 溶断配置
	limiter map[string]string // 限流配置
	// }}
}

type ProviderDefine struct {
	id      string
	cate    string // eureka, consul, k8s
	setting map[string]string
}

func (p *TargetDefine) Id() string {
	return p.id
}

func (p *RouteDefine) Id() string {
	return p.id
}

func (p *FilterDefine) Id() string {
	return p.id
}

func (p *FilterDefine) Get(s string) interface{} {
	return p.setting[s]
}

func (p *ProviderDefine) Id() string {
	return p.id
}
